//package com.atguigu.gulimall.thirdpart.controller;
//
//import com.aliyun.oss.OSS;
//import com.aliyun.oss.common.utils.BinaryUtil;
//import com.aliyun.oss.model.MatchMode;
//import com.aliyun.oss.model.PolicyConditions;
//import com.atguigu.common.utils.R;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.LinkedHashMap;
//import java.util.Map;
//
///**
// * 对象存储
// */
//@RestController
//@RequestMapping("/oss")
//public class OssController {
//
//    @Autowired
//    OSS ossClient;
//
//    @Value("${spring.cloud.alicloud.oss.endpoint}")
//    private String endpoint;
//    @Value("${spring.cloud.alicloud.oss.bucket}")
//    private String bucket;
//    @Value("${spring.cloud.alicloud.access-key}")
//    private String accessId;
//
//    /**
//     * 获取对象签名
//     */
//    @GetMapping("/policy")
//    public R policy() {
//        // https://gulimall-wan.oss-cn-shanghai.aliyuncs.com
//        String host = "https://" + bucket + "." + endpoint;
//
//        // callbackUrl为 上传回调服务器的URL，请将下面的IP和Port配置为您自己的真实信息。
////        String callbackUrl = "http://88.88.88.88:8888";
//
//        // 文件在bucket存储目录，若不存在则会自动创建路径。使用日期作为目录
//        String dir = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "/";
//
//        // 创建OSSClient实例。这里是alicloud starter自动配置，可自动注入
//        //OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);
//
//        Map<String, String> respMap = null;
//        try {
//            long expireTime = 30;
//            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
//            Date expiration = new Date(expireEndTime);//
//            // PostObject请求最大可支持的文件大小为5 GB，即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
//            PolicyConditions policyConds = new PolicyConditions();
//            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
//            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
//
//            String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
//            byte[] binaryData = postPolicy.getBytes("utf-8");
//            String encodedPolicy = BinaryUtil.toBase64String(binaryData);
//            String postSignature = ossClient.calculatePostSignature(postPolicy);
//
//            respMap = new LinkedHashMap<String, String>();
//            respMap.put("accessid", accessId);
//            respMap.put("policy", encodedPolicy);
//            respMap.put("signature", postSignature);
//            respMap.put("dir", dir);
//            respMap.put("host", host);
//            respMap.put("expire", String.valueOf(expireEndTime / 1000));
//            // respMap.put("expire", formatISO8601Date(expiration));
//
//            // 下面是跨域设置，在网关统一解决跨域
////            JSONObject jasonCallback = new JSONObject();
////            jasonCallback.put("callbackUrl", callbackUrl);
////            jasonCallback.put("callbackBody",
////                    "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
////            jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
////            String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
////            respMap.put("callback", base64CallbackBody);
////
////            JSONObject ja1 = JSONObject.fromObject(respMap);
////            // System.out.println(ja1.toString());
////            response.setHeader("Access-Control-Allow-Origin", "*");
////            response.setHeader("Access-Control-Allow-Methods", "GET, POST");
////            response(request, response, ja1.toString());
//
//        } catch (Exception e) {
//            // Assert.fail(e.getMessage());
//            System.out.println(e.getMessage());
//        } finally {
//            ossClient.shutdown();
//        }
//        return R.ok().put("data", respMap);
//    }
//}
